#include <iostream>

#include "iostream"
#include "vector"
#include "unordered_map"
#include "unordered_set"
#include "algorithm"
#include "string"
#include "list"
#include "string.h"


class OneLoop {
public:
//    std::unordered_map<int64_t,char> node_appear;

    bool run(
            int64_t n,int64_t m,int64_t p
//            std::string&s1,std::string& s2
    ) {
//        int64_t sum=0;
//        for(int64_t i=0;i<100;i++){
//            sum+=i%p;
//            sum%=p;
//        }
//
//        print64_tf("%d\n",sum%p);
//        sum=0;
//        for(int64_t i=0;i<100;i++){
//            sum+=i;
//        }
        int64_t last_2=1;
        int64_t last_1=1;
        int64_t sum=2;
        int64_t fm=-1;
        int64_t max_mn= std::max(m,n);
        for(int64_t i=3;i<=m;i++){

            int64_t fn=(last_1+last_2);//%p;
            if(i==m){
                fm=fn;
            }
            last_2=last_1;
            last_1=fn;
        }

        last_2=1;
        last_1=1;
        for(int64_t i=3;i<=n;i++){
            int64_t fn=(last_1+last_2)%fm;//%p;
//            if(i<=n)
            {
                sum+=fn;
                sum%=fm;
//                sum%=p;
            }

            last_2=last_1;
            last_1=fn;
        }
        if(fm>0){
            printf("%lld\n",sum%fm%p);
        }else{
            printf("%lld\n",sum%p);
        }
        return false;
    }
};

class Solution {
public:
    void run() {

        bool first = true;
        int64_t a, b, c, d, e;
        //        std::cin >> a;
//        std::string s1,s2;
//        while (1){
        while (
//                std::getline(std::cin,s1)
                std::cin >> a>>b>>c
//                1
                ) {
//            std::getline(std::cin,s2);
            OneLoop l;
            if (!l.run(a,b,c)) {
//                return;
            }
        }


    }
};

int main() {

    //    bool cur_num= true;
    Solution().run();
    return 0;
}

